package com.atguigu.tree;

/**
 * @author RuiKnag
 * @create 2021-05-17-17:00
 */
public class ArrBinaryTreeDemo {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7};
        ArrBinaryTree tree = new ArrBinaryTree(arr);
        System.out.println("前序遍历");
        tree.preOrder();
        System.out.println("中序遍历");
        tree.infixOrder();
        System.out.println("后续遍历");
        tree.postOrder();

    }


}
//编写一个类，实现顺序存储二叉树遍历
class ArrBinaryTree{
    private int[] arr;

    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }
    //重载PreOrder
    public void preOrder(){
        this.preOrder(0);
    }
    //重载infixOrder
    public void infixOrder(){
        this.infixOrder(0);
    }
    //重载infixOrder
    public void postOrder(){
        this.postOrder(0);
    }

    //编写一个方法，完成顺序存储二叉树的前序遍历
    //index 数组下标
    public void preOrder(int index){
        //判断数组是否为0
        if(arr==null||arr.length==0){
            System.out.println("数组为空");
            return;
        }
        System.out.println(arr[index]);
        //左子树递归
        if((2*index+1)<arr.length){
            preOrder(2*index+1);
        }
        //右子树递归
        if((2*index+2)<arr.length){
            preOrder(2*index+2);
        }
    }

    //编写一个方法，完成顺序存储二叉树的中序遍历
    //index 数组下标
    public void infixOrder(int index){
        //判断数组是否为0
        if(arr==null||arr.length==0){
            System.out.println("数组为空");
            return;
        }

        //左子树递归
        if((2*index+1)<arr.length){
            infixOrder(2*index+1);
        }
        //输出节点值
        System.out.println(arr[index]);
        //右子树递归
        if((2*index+2)<arr.length){
            infixOrder(2*index+2);
        }
    }
    //编写一个方法，完成顺序存储二叉树的后序遍历
    //index 数组下标
    public void postOrder(int index){
        //判断数组是否为0
        if(arr==null||arr.length==0){
            System.out.println("数组为空");
            return;
        }

        //左子树递归
        if((2*index+1)<arr.length){
            postOrder(2*index+1);
        }

        //右子树递归
        if((2*index+2)<arr.length){
            postOrder(2*index+2);
        }
        //输出节点值
        System.out.println(arr[index]);

    }
}
/*
* 线索二叉树：
* n个节点含有n+1个空指针，利用二叉树的空指针
*
* */
